/**
 * 
 */
package cc.monggo.demo.io;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Date;

import javax.imageio.stream.FileImageOutputStream;

/**
 * @author fangjinsong
 * 
 * 对Java IO 的深入理解之 PrintWriter
 * 
 * 理解：PrintWriter是Writer的子类，是一个写入类，写入工具。
 * PrintWriter不是一个数据，而是一台打印机，它接一面接受数据，一面输出数据。
 * 如果数据时稻子，PrintWriter就是辗米机，加的稻子，出来的是米。
 * 进去的数据有好多种，即可打印的数据有好多种，都是字符数据：
 * 有long,int,char,String等。
 * 出来的数据更多，可以讲数据放在一个OutputStream上，这样，就可以是File,System.out等
 * 请看：Writer是一个写手，是一个作家，不是文章，不是数据
 *
 */
public class PrintWriterDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		PrintWriterDemo demo = new PrintWriterDemo();
		demo.printBinaryToString();
	}
	
	public void printToFile() throws IOException{
		String root = "D:\\Documents and Settings\\fangjinsong\\桌面\\";
		String path = root + "out.txt";
		//1.创建一台打印机，为打印机装好打印纸，打印纸就是out.txt,现在打印纸一片空白
		PrintWriter printer = new PrintWriter(new File(path)); //本质上就是FileOutStream,就是OutputStream
		
		//2.为本次打印准备内容，内容从哪里来？从输出流OutputStream中来，输出流在哪里，在内存
		/**
		 * 输出流OutputStream有很多方式表达，很多形式存在，我们选择其中一种
		 * ByteArrayOutputStream, FileOutputStream, FilterOutputStream, 
		 * ObjectOutputStream, OutputStream, PipedOutputStream 
		 * 下面尝试一下
		 */
		
		/**
		 * 1.图片文件流
		 */
		FileImageOutputStream fileImageOutputStream = 
				new FileImageOutputStream(new File(root + "T1.db0XhVaXXb1upjX_70x70.jpg"));
		printer.print(fileImageOutputStream.readByte());
		
		/**
		 * 2.字符串流
		 */
		String outs = new Date().toGMTString() + "" + "ad";
		printer.print(outs);
		printer.flush();
		printer.close();
	}
	
	/**
	 * 输出到一个String
	 */
	public void printToOutputStream(){
		String root = "D:\\Documents and Settings\\fangjinsong\\桌面\\";
		String path = root + "out.txt";
		//1.创建一台打印机，为打印机装好打印纸，打印纸就是一个输出流,相当于打到了机器的记忆中，现在记忆一片空白
		OutputStream outputStream = System.out;
		PrintWriter printer = new PrintWriter(outputStream);
		
		String outs = new Date().toGMTString() + "" + "S";
		printer.print(outs);
		printer.flush();
		printer.close();
	}
	
	/**
	 * 输出一个二进制文件到String(System.out)
	 * @throws IOException 
	 * @throws FileNotFoundException 
	 */
	public void printBinaryToString() throws FileNotFoundException, IOException{
		String root = "D:\\Documents and Settings\\fangjinsong\\桌面\\";
		String path = root + "out.jpg";
		PrintWriter printer = new PrintWriter(new File(path));
		
		FileImageOutputStream fileImageOutputStream = 
				new FileImageOutputStream(new File(root + "T1.db0XhVaXXb1upjX_70x70.jpg"));
		printer.println(fileImageOutputStream);
		printer.flush();
		printer.close();
	}
	

}
